package cn.iocoder.yudao.module.member.user.mq;

import cn.hutool.extra.spring.SpringUtil;
import cn.iocoder.yudao.module.api.member.user.message.MemberUserCreateMessage;
import cn.iocoder.yudao.module.api.member.user.message.MemberUserDeleteMessage;
import cn.iocoder.yudao.module.api.member.user.message.MemberUserInviteMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 前台用户 事件生产者
 *
 * @author owen
 */
@Slf4j
@Component
public class MemberUserProducer {

    /**
     * 发送 {@link MemberUserCreateMessage} 消息
     *
     * @param userId 用户编号
     */
    public void sendUserCreateMessage(Long userId) {
        log.info("[sendUserCreateMessage] userId={}", userId);
        SpringUtil.getApplicationContext().publishEvent(new MemberUserCreateMessage(userId));
    }

    /**
     * 发送 {@link MemberUserDeleteMessage} 消息
     *
     * @param userId 用户编号
     */
    public void sendUserDeleteMessage(Long userId) {
        log.info("[sendUserDeleteMessage] userId={}", userId);
        // 生产用户注销成功事件，其他模块收到消息后进行相应处理，如解绑第三方快捷登录账号、解绑核销员关系
        SpringUtil.getApplicationContext().publishEvent(new MemberUserDeleteMessage(userId));
    }

    /**
     * 发送 {@link MemberUserInviteMessage} 消息
     *
     * @param registerUserId 注册用户编号
     * @param inviteUserId 邀请人用户编号
     */
    public void sendUserInviteMessage(Long registerUserId, Long inviteUserId) {
        log.info("[sendUserInviteMessage] registerUserId={}, inviteUserId={}", registerUserId, inviteUserId);
        // 生产邀请注册成功事件，其他模块收到消息后进行相应处理
        SpringUtil.getApplicationContext().publishEvent(new MemberUserInviteMessage(registerUserId, inviteUserId));
    }

}
